package com.webank.maling.base.model;

import com.webank.maling.base.enums.ParseType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;

import java.time.LocalDateTime;

/**
 * RPC接口节点
 */
@Data
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
public class RpcInterfaceNode extends Node {
    
    /**
     * Topic名称
     */
    private String topic;
    
    /**
     * 接口名称
     */
    private String interfaceName;
    
    /**
     * 方法名称
     */
    private String methodName;
    
    /**
     * 项目Q号
     */
    private String projectQ;
    
    /**
     * 协议类型
     */
    private String protocol;
    
    /**
     * 调用模式（同步/异步）
     */
    private String topicMode;
    
    /**
     * 节点名称
     */
    private String name;
    
    /**
     * 节点全限定名
     */
    private String fullName;
    
    /**
     * 节点类型
     */
    private String type;
    
    /**
     * 可见性
     */
    private String visibility;
    
    /**
     * 是否库文件
     */
    private Boolean isLibrary;
    
    /**
     * 开始行号
     */
    private Integer lineStart;
    
    /**
     * 结束行号
     */
    private Integer lineEnd;
    
    /**
     * 分支名称
     */
    private String branchName;
    
    /**
     * 提交状态
     */
    private String commitStatus;
    
    /**
     * 提交ID
     */
    private String commitId;
    
    /**
     * 最后更新时间
     */
    private LocalDateTime lastUpdated;
    
    /**
     * 仓库ID
     */
    private String repoId;
    
    /**
     * 是否外部
     */
    private Boolean isExternal;

    @Override
    public String getTag() {
        return "rpc_interface";
    }

    @Override
    public Object[] getProperties() {
        return new Object[]{
                getId(),
                getFullName(),
                getNodeType().getValue(),
                getTopic(),
                getInterfaceName(),
                getMethodName(),
                getProjectQ(),
                getProtocol(),
                getTopicMode(),
                getLineStart(),
                getLineEnd(),
                getBranchName(),
                getCommitStatus(),
                getLastUpdated(),
                getRepoId(),
                getIsExternal()
        };
    }

    @Override
    public String[] getPropertyNames() {
        return new String[]{
                "id",
                "fullName",
                "nodeType",
                "topic",
                "interfaceName",
                "methodName",
                "projectQ",
                "protocol",
                "topicMode",
                "lineStart",
                "lineEnd",
                "branchName",
                "commitStatus",
                "lastUpdated",
                "repoId",
                "isExternal"
        };
    }
} 